package com.mge.ae.data;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 所有资源对象的抽象类
 * @author wangbin
 *
 */
public abstract class ResourceAbstract implements IOInterface, XMLLabel{
	
	//////////////////////////翻转、旋转信息///////////////////////
	/**
	 * 水平翻转
	 */
	public static final int FLIP_X = 0x10000000;
	/**
	 * 垂直翻转
	 */
	public static final int FLIP_Y = 0x20000000;
	/**
	 * 顺时针旋转90度
	 */
	public static final int ROTATE_90 = 0x01000000;
	/**
	 * 顺时针旋转180度
	 */
	public static final int ROTATE_180 = 0x02000000;
	/**
	 * 顺时针旋转270度
	 */
	public static final int ROTATE_270 = 0x04000000;
	
	
	
	//////////////////////////资源类型常量///////////////////////
	/**
	 * 未知类型
	 */
	public static final byte TYPE_UNKNOW = 0;
	/**
	 * 图片切块类型
	 */
	public static final byte TYPE_IMAGE_SPLIT_TILE = 1;
	
	//////////////////////////资源导出类型后缀常量///////////////////////
	/**
	 * 图片切块类型可编辑文件后缀名
	 */
	public static final String EXPORT_EDITE_TYPE_IMAGE_SPLIT_TILE = ".ist";
	/**
	 * 图片切块类型数据文件后缀名
	 */
	public static final String EXPORT_DATA_TYPE_IMAGE_SPLIT_TILE = ".xist";
	
	private String lastModify;	//上次修改时间yyyy-MM-dd HH:mm:ss
//	private int version;		//版本号
	private int id;	//图片切块id
	private byte type;	//资源类型
	protected Identity identity;	//资源身份标示
	
	
	public int getId() {
		return id;
	}

	public boolean setId(int id) {
		if(id != this.id){
			this.id = id;
			return true;
		}else{
			return false;
		}
	}

	public String getLastModify() {
		return lastModify;
	}

	public void setLastModify(String lastModify) {
		this.lastModify = lastModify;
	}

//	public int getVersion() {
//		return version;
//	}
//
//	public void setVersion(int version) {
//		this.version = version;
//	}

	public byte getType() {
		return type;
	}

	public void setType(byte type) {
		this.type = type;
	}

	public Identity getIdentity() {
		return identity;
	}
	
	/**
	 * 保存之前要做的一些操作
	 */
	public void beforeSave(){
		updataVersion();
	}
	
	/**
	 * 更新版本号
	 */
	protected void updataVersion(){
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		lastModify = dateFormat.format(new Date());
		if(identity != null){
			String data = lastModify.replace("-", "").replace(" ", "").replace(":", "");
			identity.version = Long.valueOf(data);
		}
	}
	
	/**
	 * 格式化输出xml文档
	 * @param document
	 * 		文档内容
	 * @param fileName
	 * 		输出文档路径
	 * @return
	 * 		输出状态 0成功 -1失败
	 */
	public static int saveFormatXML(Document document, String fileName){
		int state = STATE_ERROR;
		try {   
			XMLWriter writer = null;
			/** 格式化输出,类型IE浏览一样 */
			OutputFormat format = OutputFormat.createPrettyPrint();
			/** 指定XML编码 */
			format.setEncoding("UTF-8");
			writer = new XMLWriter(new FileWriter(new File(fileName)),format);
			writer.write(document);
			writer.close();
			state = STATE_SUCCECSS;
		       // 缩减格式
//		       format = OutputFormat.createCompactFormat();
//		       writer = new XMLWriter( System.out, format );
//		       writer.write( document );
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return state;
	}
	
	/**
	 * 读取指定路径的xml文档 转为document对象
	 * @param fileName
	 * 			xml文件路径
	 * @return
	 */
	public static Document readXML4Document(String fileName){
		File inputXml=new File(fileName);
		SAXReader saxReader = new SAXReader();
		Document document = null;
		try {
			document = saxReader.read(inputXml);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		return document;
	}
	
}
